import pytest

# 内部模块导入
from pages.base_webdriver import BaseWebDriver
from pages.login_ui import LoginUI
from pages.device_ui import DeviceUI
from pages.service_rule_ui import ServiceRuleUI
from cfg import *


# UI实例的pytest fixtures
@pytest.fixture(scope='session')
def login_ui():
    return LoginUI()


@pytest.fixture(scope='session')
def device_ui():
    return DeviceUI()


@pytest.fixture(scope='session')
def service_rule_ui():
    return ServiceRuleUI()


# 保留原有的全局实例用于现有的fixtures（向后兼容）
loginUI = LoginUI()
deviceUI = DeviceUI()
serviceRuleUI = ServiceRuleUI()


# 在进行添加设备测试前进行（前置条件），模块级别，整个模块执行前运行一次
@pytest.fixture(scope='module')
def inDeviceModelMgr():
    print('登陆开始')
    loginUI.login('byhy', 'sdfsdf')
    deviceUI.wd.get(SMP_URL_DEVICE_MODEL)
    yield

# 添加设备用例完成一个后进行数据清除（恢复测试环境，不影响后续测试用例）
@pytest.fixture()
def delAddedDeviceModel():
    yield
    deviceUI.del_first_item()


# 添加业务规则模块的前置条件
@pytest.fixture(scope='module')
def inServiceRuleMgr():
    loginUI.login('byhy', 'sdfsdf')
    serviceRuleUI.wd.get(SMP_URL_SERVICE_RULE)
    yield


# 添加业务规则用例完成一个后进行数据清除（恢复测试环境，不影响后续测试用例）
@pytest.fixture()
def delAddedServiceRule():
    yield
    serviceRuleUI.del_first_item()


# Pytest 中 @pytest.fixture 装饰器的默认作用域（scope）是函数级别（scope="function"）
@pytest.fixture
def clearAlert():
    yield
    try:
        loginUI.wd.switch_to.alert.accept()
    except Exception as e:
        print(f"清除警告框时出现异常：{str(e)}")


# 整个会话结束后清理资源
@pytest.fixture(scope='session', autouse=True)
def browser_session():
    yield
    print('\n=== 测试会话结束，关闭浏览器 ===')
    # 在所有测试完成后关闭浏览器
    BaseWebDriver.quit_driver()
